--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / Sideband.git / files / sbapp / kivymd / uix / segmentedcontrol / segmentedcontrol.py
Displaying Raw • Download
sbapp/kivymd/uix/segmentedcontrol/segmentedcontrol.py 67a8f61af8bdd2583ef8ed24d6ad80d7e39ae677 (67a8f61a) Text, 11.08 KB
T8b949e"""
Components/SegmentedControl
===========================
.. versionadded:: 1.0.0
.. image:: https://github.com/HeaTTheatR/KivyMD-data/raw/master/gallery/kivymddoc/segmented-control-preview.jpg
:align: center
Usage
=====
.. tabs::
.. tab:: Declarative KV style
.. code-block:: python
from kivy.lang import Builder
from kivymd.app import MDApp
KV = '''
MDScreen:
MDSegmentedControl:
pos_hint: {"center_x": .5, "center_y": .5}
MDSegmentedControlItem:
text: "Male"
MDSegmentedControlItem:
text: "Female"
MDSegmentedControlItem:
text: "All"
'''
class Example(MDApp):
def build(self):
self.theme_cls.theme_style = "Dark"
self.theme_cls.primary_palette = "Orange"
return Builder.load_string(KV)
Example().run()
.. tab:: Declarative python style
.. code-block:: python
from kivymd.app import MDApp
from kivymd.uix.screen import MDScreen
from kivymd.uix.segmentedcontrol import (
MDSegmentedControl, MDSegmentedControlItem
)
class Example(MDApp):
def build(self):
self.theme_cls.theme_style = "Dark"
self.theme_cls.primary_palette = "Orange"
return (
MDScreen(
MDSegmentedControl(
MDSegmentedControlItem(
text="Male"
),
MDSegmentedControlItem(
text="Female"
),
MDSegmentedControlItem(
text="All"
),
pos_hint={"center_x": 0.5, "center_y": 0.5}
)
)
)
Example().run()
.. image:: https://github.com/HeaTTheatR/KivyMD-data/raw/master/gallery/kivymddoc/md-segmented-control-usage.gif
:align: center
Events
======
.. code-block:: kv
MDSegmentedControl:
on_active: app.on_active(*args)
.. code-block:: python
def on_active(
self,
segmented_control: MDSegmentedControl,
segmented_item: MDSegmentedControlItem,
) -> None:
'''Called when the segment is activated.'''
"""
Te6edf3__all__ Tff7b72= Tb4b4b4(Ta5d6ff"Ta5d6ffMDSegmentedControlTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffMDSegmentedControlItemTa5d6ff"Tb4b4b4)
Tff7b72import T7ee787os
Tff7b72from T7ee787kivyT7ee787.T7ee787animation Tff7b72import Te6edf3Animation
Tff7b72from T7ee787kivyT7ee787.T7ee787clock Tff7b72import Te6edf3Clock
Tff7b72from T7ee787kivyT7ee787.T7ee787lang Tff7b72import Te6edf3Builder
Tff7b72from T7ee787kivyT7ee787.T7ee787metrics Tff7b72import Te6edf3dp
Tff7b72from T7ee787kivyT7ee787.T7ee787properties Tff7b72import Tb4b4b4(
Te6edf3BooleanPropertyTb4b4b4,
Te6edf3ColorPropertyTb4b4b4,
Te6edf3NumericPropertyTb4b4b4,
Te6edf3ObjectPropertyTb4b4b4,
Te6edf3StringPropertyTb4b4b4,
Te6edf3VariableListPropertyTb4b4b4,
Tb4b4b4)
Tff7b72from T7ee787kivymd Tff7b72import Te6edf3uix_path
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787boxlayout Tff7b72import Te6edf3MDBoxLayout
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787button Tff7b72import Te6edf3MDRaisedButton
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787card Tff7b72import Te6edf3MDSeparator
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787label Tff7b72import Te6edf3MDLabel
Tff7b72from T7ee787kivymdT7ee787.T7ee787uixT7ee787.T7ee787relativelayout Tff7b72import Te6edf3MDRelativeLayout
Tff7b72with Tffa657openTb4b4b4(
Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3uix_pathTb4b4b4, Ta5d6ff"Ta5d6ffsegmentedcontrolTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffsegmentedcontrol.kvTa5d6ff"Tb4b4b4)Tb4b4b4,
Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4,
Tb4b4b4) Tff7b72as Te6edf3kv_fileTb4b4b4:
Te6edf3BuilderTff7b72.Td2a8ffload_stringTb4b4b4(Te6edf3kv_fileTff7b72.Td2a8ffreadTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72class T56d364MDSegmentedControlItemTb4b4b4(Te6edf3MDLabelTb4b4b4)Tb4b4b4:
T8b949e"""
Implements a label to place on the :class:`~SegmentPanel` panel.
See :class:`~kivymd.uix.label.MDLabel` class documentation for more
information.
"""
T8b949e# TODO: Add an attribute for the color of the active segment label.
Tff7b72class T56d364MDSegmentedControlTb4b4b4(Te6edf3MDRelativeLayoutTb4b4b4)Tb4b4b4:
T8b949e"""
Implements a segmented control panel.
For more information, see in the
:class:`~kivymd.uix.relativelayout.MDRelativeLayout` class documentation.
:Events:
`on_active`
Called when the segment is activated.
"""
Te6edf3md_bg_color Tff7b72= Te6edf3ColorPropertyTb4b4b4(Tb4b4b4[T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4]Tb4b4b4)
T8b949e"""
Background color of the segment panel in (r, g, b, a) or string format.
.. code-block:: kv
MDSegmentedControl:
md_bg_color: "brown"
.. image:: https://github.com/HeaTTheatR/KivyMD-data/raw/master/gallery/kivymddoc/md-segmented-control-md-bg-color.png
:align: center
:attr:`md_bg_color` is an :class:`~kivy.properties.ColorProperty`
and defaults to `[0, 0, 0, 0]`.
"""
Te6edf3segment_color Tff7b72= Te6edf3ColorPropertyTb4b4b4(Tb4b4b4[T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4]Tb4b4b4)
T8b949e"""
Color of the active segment in (r, g, b, a) or string format.
.. code-block:: kv
MDSegmentedControl:
md_bg_color: "brown"
segment_color: "red"
.. image:: https://github.com/HeaTTheatR/KivyMD-data/raw/master/gallery/kivymddoc/md-segmented-control-segment-color.png
:align: center
.. code-block:: kv
MDSegmentedControl:
md_bg_color: "brown"
segment_color: "red"
MDSegmentedControlItem:
text: "[color=fff]Male[/color]"
.. image:: https://github.com/HeaTTheatR/KivyMD-data/raw/master/gallery/kivymddoc/md-segmented-control-text-color.png
:align: center
:attr:`segment_color` is an :class:`~kivy.properties.ColorProperty`
and defaults to `[0, 0, 0, 0]`.
"""
Te6edf3segment_panel_height Tff7b72= Te6edf3NumericPropertyTb4b4b4(Ta5d6ff"Ta5d6ff42dpTa5d6ff"Tb4b4b4)
T8b949e"""
Height of the segment panel.
.. code-block:: kv
MDSegmentedControl:
segment_panel_height: "56dp"
.. image:: https://github.com/HeaTTheatR/KivyMD-data/raw/master/gallery/kivymddoc/md-segmented-control-segment-panel-height.png
:align: center
:attr:`segment_panel_height` is an :class:`~kivy.properties.NumericProperty`
and defaults to `'42dp'`.
"""
Te6edf3separator_color Tff7b72= Te6edf3ColorPropertyTb4b4b4(Tff7b72NoneTb4b4b4)
T8b949e"""
The color of the separator between the segments in (r, g, b, a) or string
format.
.. code-block:: kv
MDSegmentedControl:
md_bg_color: "brown"
segment_color: "red"
separator_color: "white"
.. image:: https://github.com/HeaTTheatR/KivyMD-data/raw/master/gallery/kivymddoc/md-segmented-control-separator-color.png
:align: center
:attr:`separator_color` is an :class:`~kivy.properties.ColorProperty`
and defaults to `None`.
"""
Te6edf3radius Tff7b72= Te6edf3VariableListPropertyTb4b4b4(Tb4b4b4[T79c0ff16Tb4b4b4]Tb4b4b4, Te6edf3lengthTff7b72=T79c0ff4Tb4b4b4)
T8b949e"""
Radius of the segment panel.
.. code-block:: kv
MDSegmentedControl:
radius: 0
.. image:: https://github.com/HeaTTheatR/KivyMD-data/raw/master/gallery/kivymddoc/md-segmented-control-segment-radius.png
:align: center
:attr:`radius` is an :class:`~kivy.properties.VariableListProperty`
and defaults to `[16, 16, 16, 16]`.
"""
Te6edf3segment_switching_transition Tff7b72= Te6edf3StringPropertyTb4b4b4(Ta5d6ff"Ta5d6ffin_cubicTa5d6ff"Tb4b4b4)
T8b949e"""
Name of the animation type for the switch segment.
:attr:`segment_switching_transition` is a :class:`~kivy.properties.StringProperty`
and defaults to `'in_cubic'`.
"""
Te6edf3segment_switching_duration Tff7b72= Te6edf3NumericPropertyTb4b4b4(T79c0ff0.2Tb4b4b4)
T8b949e"""
Name of the animation type for the switch segment.
:attr:`segment_switching_duration` is a :class:`~kivy.properties.NumericProperty`
and defaults to `0.2`.
"""
Te6edf3current_active_segment Tff7b72= Te6edf3ObjectPropertyTb4b4b4(Tb4b4b4)
T8b949e"""
The current active element of the :class:`~MDSegmentedControlItem` class.
:attr:`current_active_segment` is a :class:`~kivy.properties.ObjectProperty`
and defaults to `None`.
"""
Te6edf3_segment_switch_x Tff7b72= Te6edf3NumericPropertyTb4b4b4(Te6edf3dpTb4b4b4(T79c0ff4Tb4b4b4)Tb4b4b4)
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Tff7b72*Te6edf3argsTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffregister_event_typeTb4b4b4(Ta5d6ff"Ta5d6ffon_activeTa5d6ff"Tb4b4b4)
Te6edf3ClockTff7b72.Td2a8ffschedule_onceTb4b4b4(Tff7b72selfTff7b72.Td2a8ffset_default_colorsTb4b4b4)
Te6edf3ClockTff7b72.Td2a8ffschedule_onceTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_remove_last_separatorTb4b4b4)
Tff7b72def Td2a8ffset_default_colorsTb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""
Sets the colors of the panel and the switch if the colors are not set
by the user.
"""
Tff7b72if Tff7b72selfTff7b72.Td2a8ffmd_bg_color Tff7b72== Tb4b4b4[T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffmd_bg_color Tff7b72= Tff7b72selfTff7b72.Td2a8fftheme_clsTff7b72.Td2a8ffbg_darkest
Tff7b72if Tff7b72selfTff7b72.Td2a8ffsegment_color Tff7b72== Tb4b4b4[T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4, T79c0ff0Tb4b4b4]Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffsegment_color Tff7b72= Tff7b72selfTff7b72.Td2a8fftheme_clsTff7b72.Td2a8ffbg_dark
Tff7b72def Td2a8ffanimation_segment_switchTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3widgetTb4b4b4: Te6edf3MDSegmentedControlItemTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""Animates the movement of the switch."""
Te6edf3AnimationTb4b4b4(
Te6edf3_segment_switch_xTff7b72=Te6edf3widgetTff7b72.Td2a8ffx Tff7b72- Te6edf3dpTb4b4b4(T79c0ff6Tb4b4b4)Tb4b4b4,
Te6edf3tTff7b72=Tff7b72selfTff7b72.Td2a8ffsegment_switching_transitionTb4b4b4,
Te6edf3dTff7b72=Tff7b72selfTff7b72.Td2a8ffsegment_switching_durationTb4b4b4,
Tb4b4b4)Tff7b72.Td2a8ffstartTb4b4b4(Tff7b72selfTb4b4b4)
Tff7b72def Td2a8ffupdate_segment_panel_widthTb4b4b4(
Tff7b72selfTb4b4b4, Te6edf3widgetTb4b4b4: Te6edf3MDSegmentedControlItem
Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""
Sets the width of the panel for the elements of the
:class:`~MDSegmentedControlItem` class.
"""
Te6edf3widgetTff7b72.Td2a8fftext_size Tff7b72= Tb4b4b4(Tff7b72NoneTb4b4b4, Tff7b72NoneTb4b4b4)
Te6edf3widgetTff7b72.Td2a8fftexture_updateTb4b4b4(Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8ffsegment_panelTff7b72.Td2a8ffwidth Tff7b72+Tff7b72= Tb4b4b4(
Te6edf3widgetTff7b72.Td2a8fftexture_sizeTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72+ Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8ffsegment_panelTff7b72.Td2a8ffspacing
Tb4b4b4)
Tff7b72def Td2a8ffupdate_separator_colorTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3widgetTb4b4b4: Te6edf3MDSeparatorTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""Updates the color of the separators between segments."""
Te6edf3widgetTff7b72.Td2a8ffcolor Tff7b72= Tb4b4b4(
Tff7b72selfTff7b72.Td2a8ffseparator_color
Tff7b72if Tff7b72selfTff7b72.Td2a8ffseparator_color
Tff7b72else Tff7b72selfTff7b72.Td2a8fftheme_clsTff7b72.Td2a8ffdivider_color
Tb4b4b4)
Tff7b72def Td2a8ffadd_widgetTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3widgetTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3widgetTb4b4b4, Tb4b4b4(Te6edf3SegmentPanelTb4b4b4, Te6edf3SegmentSwitchTb4b4b4)Tb4b4b4)Tb4b4b4:
Tff7b72return Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffadd_widgetTb4b4b4(Te6edf3widgetTb4b4b4)
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3widgetTb4b4b4, Te6edf3MDSegmentedControlItemTb4b4b4)Tb4b4b4:
Te6edf3ClockTff7b72.Td2a8ffschedule_onceTb4b4b4(
Tff7b72lambda Te6edf3xTb4b4b4: Tff7b72selfTff7b72.Td2a8ffupdate_segment_panel_widthTb4b4b4(Te6edf3widgetTb4b4b4)
Tb4b4b4)
Te6edf3widgetTff7b72.Td2a8ffbindTb4b4b4(Te6edf3on_touch_downTff7b72=Tff7b72selfTff7b72.Td2a8ffon_press_segmentTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8ffsegment_panelTff7b72.Td2a8ffadd_widgetTb4b4b4(Te6edf3widgetTb4b4b4)
Te6edf3separator Tff7b72= Te6edf3MDSeparatorTb4b4b4(Te6edf3orientationTff7b72=Ta5d6ff"Ta5d6ffverticalTa5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8ffsegment_panelTff7b72.Td2a8ffadd_widgetTb4b4b4(Te6edf3separatorTb4b4b4)
Tff7b72if Tff7b72not Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8ffsegment_panelTff7b72.Td2a8ff_startedTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8ffsegment_panelTff7b72.Td2a8ff_started Tff7b72= Tff7b72True
Tff7b72elseTb4b4b4:
Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8ffsegment_panelTff7b72.Td2a8ffchildren_number Tff7b72+Tff7b72= T79c0ff1
Te6edf3ClockTff7b72.Td2a8ffschedule_onceTb4b4b4(
Tff7b72lambda Te6edf3xTb4b4b4: Tff7b72selfTff7b72.Td2a8ffupdate_separator_colorTb4b4b4(Te6edf3separatorTb4b4b4)
Tb4b4b4)
Tff7b72def Td2a8ffon_activeTb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
T8b949e"""Called when the segment is activated."""
Tff7b72def Td2a8ffon_press_segmentTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3widgetTb4b4b4: Te6edf3MDSegmentedControlItemTb4b4b4, Te6edf3touchTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3widgetTff7b72.Td2a8ffcollide_pointTb4b4b4(Te6edf3touchTff7b72.Td2a8ffxTb4b4b4, Te6edf3touchTff7b72.Td2a8ffyTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffanimation_segment_switchTb4b4b4(Te6edf3widgetTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffcurrent_active_segment Tff7b72= Te6edf3widget
Tff7b72selfTff7b72.Td2a8ffdispatchTb4b4b4(Ta5d6ff"Ta5d6ffon_activeTa5d6ff"Tb4b4b4, Te6edf3widgetTb4b4b4)
Tff7b72def Td2a8ff_remove_last_separatorTb4b4b4(Tff7b72selfTb4b4b4, Tff7b72*Te6edf3argsTb4b4b4)Tb4b4b4:
Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8ffsegment_panelTff7b72.Td2a8ffremove_widgetTb4b4b4(Tff7b72selfTff7b72.Td2a8ffidsTff7b72.Td2a8ffsegment_panelTff7b72.Td2a8ffchildrenTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)
Tff7b72class T56d364SegmentSwitchTb4b4b4(Te6edf3MDRaisedButtonTb4b4b4)Tb4b4b4:
T8b949e"""Implements a switch for the :class:`~MDSegmentedControl` class."""
Te6edf3_no_ripple_effect Tff7b72= Te6edf3BooleanPropertyTb4b4b4(Tff7b72TrueTb4b4b4)
Tff7b72class T56d364SegmentPanelTb4b4b4(Te6edf3MDBoxLayoutTb4b4b4)Tb4b4b4:
T8b949e"""
Implements a panel for placing items - :class:`~MDSegmentedControlItem`
for the :class:`~MDSegmentedControl` class.
"""
Te6edf3children_number Tff7b72= Te6edf3NumericPropertyTb4b4b4(T79c0ff1Tb4b4b4)
Te6edf3_started Tff7b72= Te6edf3BooleanPropertyTb4b4b4(Te6edf3defaultvalueTff7b72=Tff7b72FalseTb4b4b4)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────